(function() {
  'use strict';

  riot.tag('todo-item', document.getElementById('todo-item').innerHTML, function(opts) {
    var _this = this;
    _this.editing = false;

    _this.toggle = function(e) {
      _this.todo.completed = !_this.todo.completed;
      return true;
    };

    _this.edit = function(e) {
      _this.editing = true;
      _this.todoeditbox.value = _this.todo.title;
    };

    _this.remove = function(e) {
      _this.parent.remove(_this.todo);
    };

    _this.doneEdit = function(e) {
      _this.editing = false;
      var enteredText = _this.todoeditbox.value && _this.todoeditbox.value.trim();
      if (enteredText) {
        _this.todo.title = enteredText;
      } else {
        _this.remove();
      }
    };

    _this.editKeyUp = function(e) {
      if (e.which == 13) { // enter
        _this.doneEdit();
      } else if (e.which == 27) { // esc
        _this.editing = false;
        _this.todoeditbox.value = _this.todo.title;
      }
    };

    _this.on('update', function() {
      if (_this.editing) {
        _this.parent.update();
        _this.todoeditbox.focus();
      }
    });
  });
}());
